﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Text;

namespace Sinacor.Infra.Tools
{
    //inc - esertorio - 200810101146
    public class SubModuloDataAcess
    {
        public List<SubModulo> consultar(SubModulo subModulo)
        {
            return this.filtrar(this.consultarXml(), subModulo);
        }

        public List<SubModulo> consultar()
        {
            return this.consultarXml();
        }

        private List<SubModulo> filtrar(List<SubModulo> subModulos, SubModulo subModulo)
        {
            int qtdeLoops = subModulos.Count;
            List<SubModulo> listaFiltrada = new List<SubModulo>();
            for (int i = 0; i < qtdeLoops; i++)
            {
                if (subModulos[i].Id == subModulo.Id)
                {
                    listaFiltrada.Add(subModulos[i]);
                    return listaFiltrada;
                }
                else if (subModulos[i].Descricao == subModulo.Descricao)
                {
                    listaFiltrada.Add(subModulos[i]);
                }
                else if (subModulos[i].Modulo == subModulo.Modulo)
                {
                    listaFiltrada.Add(subModulos[i]);
                }
            }
            return listaFiltrada;
        }

        /// <summary>
        /// busca os módulos cadastrados no xml .config, feito rapidamente, por isso 
        /// não usa XSD nem xpath num xml personalizado
        /// </summary>
        /// <param name="modulo"></param>
        /// <returns></returns>
        private List<SubModulo> consultarXml()
        {
            string subModulo = System.Configuration.ConfigurationManager.AppSettings["SUBMODULOS"];
            if (string.IsNullOrEmpty(subModulo)) throw new Exception("Não existem sub-módulos cadastrados no arquivo de configuração.");
            string[] subModulos = subModulo.Replace("\r", "").Replace("\n", "").Split(';');
            int qtdeLoops = subModulos.Length;

            SubModulo entidade = null;
            List<SubModulo> listaSubModulos = new List<SubModulo>();
            for (int i = 0; i < qtdeLoops; i++)
            {
                if ((!string.IsNullOrEmpty(subModulos[i])) && subModulos[i].IndexOf(',') > -1)
                {
                    string [] propriedadesSubModulo = subModulos[i].Split(',');
                    entidade = new SubModulo();
                    entidade.Modulo = propriedadesSubModulo[0]; //modulo a que pertence
                    entidade.Id = propriedadesSubModulo[1]; //valor
                    entidade.Descricao = propriedadesSubModulo[2]; //descricao
                }
                else
                {
                    entidade.Id = subModulos[i];
                    entidade.Descricao = entidade.Id;
                }
                listaSubModulos.Add(entidade);
            }
            return listaSubModulos;
        }
    }
}
